package com.boot.ys.mybatisplus.Test;

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.*;

/**
 * 描述
 *
 * @Author yangsheng
 * @Date 2025/4/10 11:13
 */

public class RenameXml {


    // public static void main(String[] args) {
    //
    //     try {
    //
    //         kkkkk("E:\\studyProject\\travelling", "kefangleixing", "hotel_type");
    //
    //     }catch (Exception e){
    //         e.printStackTrace();
    //     }
    //
    // }

    /**
     * 更新xml文件内容
     *
     * @param Path 项目根目录
     * @param oldClassName  拼音表名 jiudianxinxi
     * @param newClassName 表英文表名 hotel_info
     * @Date: 2025/4/10
     */
    static void updateXmlContent(String Path,String oldClassName,String newClassName) throws IOException {

        Path startPath = Paths.get(Path);

        // 包含的文件扩展名
        Set<String> set = new HashSet<>();
        set.add("xml");

        Map<String, String> map = new HashMap<>();
        // 更新表名称
        // 使用 \b 确保只匹配独立单词（不会匹配 jiudianyudingInfo 等）
        map.put("\\b" + oldClassName + "\\b", newClassName);


        Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                // 获取文件名
                String fileName = file.getFileName().toString();

                // 检查文件是否有扩展名（即是否包含点号）
                int dotIndex = fileName.lastIndexOf('.');
                if (dotIndex > 0) {  // 确保点号不在开头位置
                    // 提取扩展名（去掉点号，并转为小写）
                    String fileExtension = fileName.substring(dotIndex + 1).toLowerCase();

                    // 检查扩展名是否在允许的集合中
                    if (set.contains(fileExtension)) {
                        // 只有符合条件的文件才会被处理
                        processFileContent(file,map);
                    }
                }
                return FileVisitResult.CONTINUE;
            }
        });

        System.out.println("更新Xml内容成功!");
    }

     static void processFileContent(Path file, Map<String, String> map) throws IOException {
        String content = new String(Files.readAllBytes(file), "UTF-8");


        String result = content;
        for (Map.Entry<String, String> entry : map.entrySet()) {
            result = result.replaceAll(entry.getKey(), entry.getValue());
        }

        if (!result.equals(content)) {
            System.out.println("Updating content of: " + file);
            Files.write(file, result.getBytes("UTF-8"), StandardOpenOption.TRUNCATE_EXISTING);
        }
    }

}

